"""
#题目一：需求编程
# i.定义了一个学生类：属性: 学号，姓名，年龄，性别，身高，体重，成绩，
# 家庭地址，电话号码。行为：学习（要求参数传入学习的时间），玩游戏（要求参数传入游戏名），
# 编程（要求参数传入写代码的行数），数的求和（要求参数用变长参数来做，返回求和结果）
class StudentS:
    def __init__(self, stu_id, name, age, sex, height, weight, score, address, tel):
        self.stu_id = stu_id
        self.name = name
        self.age = age
        self.sex = sex
        self.height = height
        self.weight = weight
        self.score = score
        self.address = address
        self.tel = tel

    def learning(self, Ltime):
        print("学些了%s个小时" % Ltime)

    def play(self, Gname):
        print("玩%s游戏" % Gname)

    def code(self, Ctime):
        print("编了%s个小时的代码" % Ctime)

    def num_total(self, *nums):
        total = 0
        for num in nums:
            if isinstance(num, (int, float)):
                total += num
            else:
                print("参数属性不是数字类型")
        return total

    def __str__(self):
        return (f"学号: {self.stu_id}\n"
                f"姓名: {self.name}\n"
                f"年龄: {self.age}\n"
                f"性别: {self.sex}\n"
                f"身高: {self.height}\n"
                f"体重: {self.weight}\n"
                f"分数: {self.score}\n"
                f"地址: {self.address}\n"
                f"电话: {self.tel}")


WangMing = StudentS(101, 'WangMing', 18, '男', 170, 130, 150, '北京', 110)

# ii.车类：属性：车型号，车轮数，车身颜色，车重量，油箱存储大小 。
# 功能：跑（要求参数传入车的具体功能，比如越野，赛车）
# 创建：法拉利，宝马，铃木，五菱，拖拉机对象
class Car:
    def __init__(self, Car_mode, Num_Wheels, Car_Color, Car_Weight, Fuel_Capacity):
        self.Car_mode = Car_mode
        self.Num_Wheels = Num_Wheels
        self.Car_Color = Car_Color
        self.Car_Weight = Car_Weight
        self.Fuel_Capacity = Fuel_Capacity

    def run(self, function):
        print(f"车辆具有{function}功能")


Ferrari = Car("911", 4, "红色", "1200KG", "50L")
BMW = Car("i4", 4, "橙色", "1100KG", "55L")
Suzuki = Car("雨燕", 4, "红色", "1000KG", "50L")
WuLing = Car("星光", 4, "黑色", "1400KG", "60L")
Tractor = Car("东方红", 8, "黄色", "5000KG", "300L")
Ferrari.run("赛车")

# iii.笔记本：属性：型号，待机时间，颜色，重量，cpu型号，内存大小，硬盘大小。
# 行为：打游戏（传入游戏的名称）, 办公。
class LapTop:
    def __init__(self, Model, Standby_time, Color, Weight, Cpu_Model, Ram, Hard_Disk):
        self.Model = Model
        self.Standby_time = Standby_time
        self.Color = Color
        self.Weight = Weight
        self.Cpu_Model = Cpu_Model
        self.Ram = Ram
        self.Hard_Disk = Hard_Disk

    def Play_Game(self, Game):
        print(f"玩{Game}")

    def Work(self):
        print("办公")

# iv.猴子类：属性：类别，性别，身体颜色，体重。
# 行为：造火（要求传入造火的材料：比如木棍还是石头），
# 学习事物（要求参数传入学习的具体事物，可以不止学习一种事物）
class Monkey:
    def __init__(self, Category, Sex, Body_Color, Weight):
        self.Category = Category
        self.Sex = Sex
        self.Body_Color = Body_Color
        self.Weight = Weight
    def make_Fire(self,material):
        print(f"Monke使用{material}造火")
    def monkey_Learning(self,*sth):
        print(f"Monkey学习{sth}")
banana=Monkey("长鼻猴","公","黄色","30KG")
banana.monkey_Learning("吃饭","睡觉","打豆豆","玩三国杀","原神抽卡","王者荣耀氪金",
                       "三角洲行动刮地皮","逛孙笑川吧","刷抖音","玩我的世界","洗澡")

"""
"""
#系统编程二：打电话业务逻辑
# 人类：
# 属性:
#     姓名，性别，年龄，所拥有的手机剩余话费，手机品牌，
#         手机电池容量，手机屏幕大小，手机最大待机时长，所拥有的积分。
# 功能：
#     发短信（要求参数传入短信内容）。
#         打电话（要求传入要打的电话号码和要打的时间长度。
#         程序里判断号码是否为空或者本人的话费是否小于1元，
#         若为空或者小于1元则报相对应的错误信息，否则的话拨通。
#         结束后，按照时间长度扣费并返回扣费并且按照分钟给手机卡累加积分
#         （0~10分钟：1元/钟、15个积分/钟，10~20分钟：0.8元/钟、39个积分/钟，
#         其他：0.65元/钟、48个积分/钟））
class Person:
    def __init__(self, name, sex, age, remaining_credit, phone_Brand, battery_Capacity, size, max_Standby_time,
                 integral):
        self.name = name
        self.sex = sex
        self.age = age
        self.remaining_credit = remaining_credit
        self.phone_Brand = phone_Brand
        self.battery_Capacity = battery_Capacity
        self.size = size
        self.max_Standby_time = max_Standby_time
        self.integral = integral

    def texting(self, text):
        print(f"发送如下消息：{text}")

    def call(self, tell, time):
        if tell is not None:
            if int(self.remaining_credit) >= 1:
                print("电话呼叫中，请稍等......")
                if 0 <= time <= 10:
                    self.remaining_credit -= self.remaining_credit * 1
                    self.integral += self.integral * 15
                elif 10 < time <= 20:
                    self.remaining_credit -= self.remaining_credit * 0.8
                    self.integral += self.integral * 39
                    # time >20
                else:
                    self.remaining_credit -= self.remaining_credit * 0.65
                    self.integral += self.integral * 48
                print(f"剩余话费：{self.remaining_credit}")
                print(f"剩余积分：{self.integral}")
            else:
                print("话费余额小于1元，请充值后再呼叫。")
        else:
            print("手机号为空，请重新输入。")


WangShuai = Person("王帅", "男", 20, 3, "杂粮", "1000mAh", "6.1寸", "12h", 200)
WangShuai.call(110, 20)
"""
